﻿/**
 * @file guild.h
 * @date 2021/04/14 21:09
 *
 * @author harrybao (harrybao@123u.com)
 *
 * @brief 公会相关定义
 *
 * @version v1.0.0
 *
 * @copyright Copyright © 2021 All Rights Reserved 上海欢乐互娱网络科技有限公司
 *
 * @par history:
 * <table>
 * <tr><th>Date                     <th>Version     <th>Author <th>Description
 * <tr><td>2021/04/14 21:09         <td>1.0.0       <td>harrybao
 * <td>创建初始版本
 * </table>
 */

// #ifndef GUILD_H
// #define GUILD_H

#pragma once

#include <cinttypes>
#include <limits>
#include <array>

namespace guild_service {

using guild_id_type = uint64_t;       ///< 公会id类型
using role_uuid_type = uint64_t;      ///< 角色唯一id类型
using token_type = uint32_t;          ///< 凭证类型
using guild_icon_id_type = uint32_t;  ///< Icon id类型

/// 非法公会id类型
constexpr guild_id_type kInvalidGuildId = 0ull;
/// 非法角色唯一id类型
constexpr role_uuid_type kInvalidRoleUuid = 0ull;
/// 非法公会模块池索引id类型
constexpr std::size_t kInvalidPoolIndex = std::numeric_limits<uint32_t>::max();
/// 非法凭证
constexpr token_type kInvalidToken = 0u;
/// 异步加载公会模块的间隔
constexpr uint32_t kLoadGuildModuleInterval = 2000;
/// 最大公会成员人数
constexpr std::size_t kMaxGuildMemberSize = 1000;
/// TODO 公会id初始值
constexpr guild_id_type kGuildBeginId = 1000;


/**
 * @brief 公会
 *
 */
struct Guild {
  guild_id_type id{kInvalidGuildId};          ///< 公会id
  std::size_t pool_index{kInvalidPoolIndex};  ///< 模块池索引id
};

constexpr char kGuildServicePrefix[] = 
    "/service/";  ///< 公会服务前缀名
constexpr char kGuildServiceBasicName[] =
    "GuildServiceBasic";  ///< 公会基础服务名字
constexpr char kGuildServiceQueryName[] =
    "GuildServiceQuery";  ///< 公会查询服务名字
constexpr char kGuildServiceWelfareName[] =
    "GuildServiceWelfare";  ///< 公会福利服务名字

constexpr char kGuildServiceAuthName[] =
    "GuildServiceAuth";  ///< 公会认证服务名字
constexpr char kGuildServiceAuthUuid[] =
    "5985686777450930310";  ///< 公会认证服务uuid

constexpr char kGuildServiceTimerName[] =
    "GuildServiceTimer";  ///< 公会定时服务名字

constexpr char kGuildServiceBuildingName[] =
    "GuildServiceBuilding";  ///< 公会建筑服务名字

constexpr char kGuildServiceRankName[] =
    "GuildServiceRank";  ///< 公会排名服务名字

constexpr char kGuildServiceTaskName[] =
    "GuildServiceTask";  ///< 公会任务服务名字

constexpr char kGuildServiceChatName[] =
    "GuildServiceChat";  ///< 公会聊天服务名字

constexpr char kGuildServiceActivityName[] =
    "GuildServiceActivity";  ///< 公会活动服务名字

/**
 * @brief 获取模块优先偏好
 *
 */
enum class GetModulePriority : uint8_t {
  GET_MODULE_PRI_USE_CACHE = 0,  ///< 优先使用缓存
  GET_MODULE_PRI_USE_REDIS       ///< 优先使用redis
};

// #ifdef DEBUG

static std::array<std::string, 5> kTestAccountList = {
    "Account1", "Account2", "Account3", "Account4", "Account5"};
static std::array<std::string, 5> kTestPasswdList = {
    "Passwd1", "Passwd2", "Passwd3", "Passwd4", "Passwd5"};

static std::array<role_uuid_type, 5> kTestRoleUuidList = {};

static std::array<token_type, 5> kTestTokenList = {};

// #endif // DEBUG

}  // namespace guild_service

// #endif  // GUILD_H